<?php

/**
 * Copyright              [HD框架] (C)2011-2012 houdunwang ，Inc. 
 * Encoding               UTF-8
 * Version                 $Id: HD.php      2012-2-6  16:36:09
 * @author                向军
 * Link                       http://www.houdunwang.com       
 * E-mail                    houdunwang@gmail.com
 */

/**
 * HD框架运行主文件 
 */
final class HD {

    private static $boot; //核心编译文件boot.php
    public static $compile; //是否编译核心编译文件
    private static $version = "12.7.22 Beta"; //HD框架版本
    private static $is_run = false;

    /**
     * 运行HD框架产品 
     */
    static public function run() {
        if (self::$is_run) {
            return;
        }
        self::$is_run = true;
        //     self::enter(); //验证单入口文件
        self::$compile = defined("COMPILE") ? COMPILE : true;
        self::Definition(); //配置系统常量
        self::$boot = PATH_TEMP . '/boot.php'; //核心编译文件
        if (self::$compile && is_file(self::$boot)) {
            require self::$boot; //如果编译文件存在加载核心编译文件boot.php
            application::run(); //运行应用目录下的项目
            return;
        }
//        if (!defined("TEMP_DIR_EXISTS")) {
        self::mkdirs(); //创建核心目录
//        }
        self::compileCoreFile(); //编译生成核心文件boot.php
//         self::createDemoControl(); //建立测试主模块
        application::run(); //运行应用目录下的项目
    }

    /**
     * 验证单入口文件
     * @return boolean 
     */
    static function enter() {
        $str = "<html>
                    <head>
                        <meta charset='utf-8'/>
                    </head>
                    <body>
                <div style='border:1px solid #333;padding:20px;font-size:16px;width:800px;color:#4F5155;background:none repeat scroll 0 0 #F9F9F9'>
                <h3>单入口文件设置错误<h3>
                <p style='border-top:1px solid #dcdcdc; font-weight:normal;padding:10px;font-size:14px;line-height:2em;'>
                    A：如果以<strong style='color:green;'>[应用组]</strong>形式访问，请设置常量APP_GROUP<br/>
                    B：如果以<strong style='color:green;'>[应用]</strong>形式访问，请设置常量APP_NAME<br/><br/>
                    注：应用组与应用只需要设置一个,详细使用请参考HD框架手册
                </p>
                </div>
                </body>
                </html>";
        if (defined("APP_GROUP") && defined("APP_NAME")) {
            echo $str;
            exit;
        }
        return;
        if (defined("APP_GROUP") || defined("APP_NAME")) {
            return;
        }
        echo $str;
        exit;
    }

    /**
     * 系统常量定义 
     */
    static private function Definition() {
        define("HD_VERSION", self::$version); //后盾框架版本
        define("PATH_HD", str_replace("\\", "/", dirname(__FILE__))); //框架目录
        define("PATH_ORG", PATH_HD . '/org'); //扩展插件路径
        define("PATH_ROOT", dirname(PATH_HD)); //网站物理路径
        define("PATH_TEMP", PATH_ROOT . '/temp'); //运行时的临时目录路径
        define("PATH_LOG", PATH_TEMP . '/log'); //日志文件目录路径
        define("PATH_SESSION", PATH_TEMP . '/session'); //保存SESSION文件的目录路径
    }

    /**
     * 载入编译核心文件 
     */
    private static function compileCoreFile() {
        $coreFile = PATH_HD . '/libs/boot/compileFiles.php'; //需要编译的文件
        $files = require $coreFile; //载入需要编译到boot.phps中的文件列表
        foreach ($files as $v) {
            if (is_file($v))
                require $v;
        }
        if (!self::$compile) {
            if (is_file(self::$boot)) {
                unlink(self::$boot);
            }
            return; //是否编译核心文件
        }
        $data = php_merge($files, 1); //合并且删除空格
        $data = "<?php  if(!defined('PATH_HD')){exit;}define('TEMP_DIR_EXISTS',1);" . $data . ' ?>';
        file_put_contents(self::$boot, $data); //写入核心编译文件boot.php
    }

    /**
     * 创建运行目录
     */
    static private function mkdirs() {
//        if (defined("APP_GROUP") && !is_dir(PATH_APP_GROUP))
//            @mkdir(PATH_APP_GROUP, 0777) || die((PATH_APP_GROUP . L("HD_mkdirs_app_group"))); // "应用组目录创建失败，请修改权限！"
        if (!is_dir(PATH_TEMP))
            @mkdir(PATH_TEMP, 0777) || die((PATH_TEMP . L("HD_mkdirs_path_temp"))); //"临时目录创建失败，请修改权限！"
        if (!is_dir(PATH_LOG))
            @mkdir(PATH_LOG, 0777) || die((PATH_LOG . L("HD_mkdirs_path_log"))); //"日志目录创建失败，请修改权限！"
        if (!is_dir(PATH_SESSION))
            @mkdir(PATH_SESSION, 0777) || die((PATH_SESSION . L("HD_mkdirs_path_session"))); //"SESSION目录目录创建失败，请修改权限！"
    }

    /**
     * 创建测试主控制器文件 
     */
    static private function createDemoControl() {
//        $demoApp = defined('APP_NAME') ? APP_NAME : 'index';
//        $demoDir = array();
//        if (defined("APP_GROUP")) {
//            $demoDir['demo_app_group_libs_dir'] = PATH_APP_GROUP . '/libs';
//            $demoDir['demo_app_group_config_dir'] = PATH_APP_GROUP . '/config';
//        }
//        $demoDir['demo_app_dir'] = PATH_APP_GROUP . '/' . $demoApp . '/control';
//        if (is_dir($demoDir['demo_app_dir'])) {
//            return;
//        }
//        $demoDir['demo_model_dir'] = PATH_APP_GROUP . '/' . $demoApp . '/model';
//        $demoDir['demo_libs_dir'] = PATH_APP_GROUP . '/' . $demoApp . '/libs';
//        $demoDir['demo_config_dir'] = PATH_APP_GROUP . '/' . $demoApp . '/config';
//        $demoDir['demo_tpl_dir'] = PATH_APP_GROUP . '/' . $demoApp . '/tpl';
//        $demoDir['demo_language_dir'] = PATH_APP_GROUP . '/' . $demoApp . '/language';
//        $demoDir['demo_tpl_public_dir'] = PATH_APP_GROUP . '/' . $demoApp . '/tpl/public';
//        foreach ($demoDir as $v) {
//            dir_create($v);
//        }
//        $demo_control_file = $demoDir['demo_app_dir'] . '/index' . C("CONTROL_FIX") . '.php';
//        $data = <<<str
//<?php
//class indexControl extends Control{
//    function index(){
//        header("Content-type:text/html;charset=utf-8");
//        echo "<div style='font-size:16px;font-weight:bold;color:#333;margin-left:20px;border:solid 2px #F00;width:500px;height:30px;padding:30px 50px 20px;'>感谢使用由后盾网提供的HD开源框架，基础目录已经创建成功！</div>";
//    }
//}
//str;
//        file_put_contents($demo_control_file, $data);
//        copy(PATH_HD . '/libs/boot/config.php', $demoDir['demo_config_dir'] . '/config.php'); //复制错误页面error.html到模版文件夹下
//        copy(PATH_HD . '/data/tpl/error.html', $demoDir['demo_tpl_public_dir'] . '/error.html'); //复制错误页面error.html到模版文件夹下
//        copy(PATH_HD . '/data/tpl/success.html', $demoDir['demo_tpl_public_dir'] . '/success.html'); //复制错误页面error.html到模版文件夹下

        $languageDataUtf8 = <<<str
<?php
/**
 * Copyright              [HD框架] (C)2011-2012 houdunwang ，Inc. 
 * Encoding               UTF-8
 * @author                向军
 * Link                   http://www.houdunwang.com       
 * E-mail                 houdunwang@gmail.com
 */
/**
 * 本文件为语言包测试文件，在视图页面中通过{\$hd.lang.title}即可调用 
 * 可以创建任意多个语言文件如gbk,en,utf8等
 * 具体使用哪一个语言包可以能过C("language","utf8")这种方式设计或者直接修改配置文件
 */
if(!defined("PATH_HD"))exit;
return array(
    "title"=>"后盾多语言测试",
);
?>
str;
//        file_put_contents($demoDir['demo_language_dir'] . '/utf8.php', $languageDataUtf8);
    }

}

HD::run();